﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

//using para la webcam
using System.IO;
using System.Drawing.Imaging;
using AForge.Video;
using AForge.Video.DirectShow;

namespace PresentacionEscritorio
{
    public partial class frmTomarFoto : Form
    {
        //atributos
        private bool existenDispositivos = false;
        private FilterInfoCollection dispositivosDeVideo;
        private VideoCaptureDevice fuenteDeVideo = null;

        private string rutaFoto;
        private bool seCapturoFoto = false;
        private frmRegistrarProfesional frmProf = null;
        private frmRegistrarPaciente frmPac = null;
        private frmRegistrarEmpleado frmRegEmp = null;

        public frmTomarFoto()
        {
            InitializeComponent();
            BuscarDispositivos();
        }

        private void frmTomarFoto_Load(object sender, EventArgs e)
        {
            cmbDispositivos.SelectedIndex = -1;
            btnIniciarDetener.Enabled = false;
        }

        public void setFormProfesional(frmRegistrarProfesional form)
        {
            frmProf = form;
        }
        public void setFormPaciente(frmRegistrarPaciente form)
        {
            frmPac = form;
        }
        public void setFormEmpleado(frmRegistrarEmpleado form)
        {
            frmRegEmp = form;
        }
        
        public void CargarDispositivos(FilterInfoCollection Dispositivos)
        {
            for (int i = 0; i < Dispositivos.Count; i++)
                cmbDispositivos.Items.Add(Dispositivos[i].Name.ToString()); //cboDispositivos es nuestro combobox
            cmbDispositivos.Text = cmbDispositivos.Items[0].ToString();
        }

        public void BuscarDispositivos()
        {
            dispositivosDeVideo = new FilterInfoCollection(FilterCategory.VideoInputDevice);
            if (dispositivosDeVideo.Count == 0)
                existenDispositivos = false;
            else
            {
                existenDispositivos = true;
                CargarDispositivos(dispositivosDeVideo);
            }
        }

        public void TerminarFuenteDeVideo()
        {
            if (!(fuenteDeVideo == null))
                if (fuenteDeVideo.IsRunning)
                {
                    fuenteDeVideo.SignalToStop();
                    fuenteDeVideo = null;
                }
        }

        private void video_NuevoFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Bitmap Imagen = (Bitmap)eventArgs.Frame.Clone();
            pbFoto.Image = Imagen; 
        }

        private void button2_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.Filter = "Png Image|*.png|Jpeg Image|*.jpg|Bitmap Image|*.bmp|Gif Image|*.gif";
            saveFileDialog1.Title = "Save an Image File";
            saveFileDialog1.ShowDialog();

            if (saveFileDialog1.FileName != "")
            {
                // Saves the Image via a FileStream created by the OpenFile method.
                System.IO.FileStream fs =
                   (System.IO.FileStream)saveFileDialog1.OpenFile();
                
                //string nombreFoto = "FotoWebCam";
                pbFoto.Image.Save(fs, ImageFormat.Png);
                rutaFoto = saveFileDialog1.FileName;
                seCapturoFoto = true;
                if (frmProf != null)
                    frmProf.cargarFoto(rutaFoto);
                else if (frmPac != null)
                    frmPac.cargarFoto(rutaFoto);
                else if (frmRegEmp != null)
                    frmRegEmp.cargarFoto(rutaFoto);
                fs.Close();
                this.Dispose();
            }
        }

        public string getRutaFoto()
        {
            if (seCapturoFoto)
                return rutaFoto;
            else
                return null;
        }

        private void btnIniciarDetener_Click(object sender, EventArgs e)
        {
            if (btnIniciarDetener.Text == "Iniciar")
                {
                    if (existenDispositivos)
                    {
                        fuenteDeVideo = new VideoCaptureDevice(dispositivosDeVideo[cmbDispositivos.SelectedIndex].MonikerString);
                        fuenteDeVideo.NewFrame += new NewFrameEventHandler(video_NuevoFrame);
                        fuenteDeVideo.Start();
                        btnIniciarDetener.Text = "Detener";
                        btnIniciarDetener.Image = Image.FromFile("C:\\Users\\PLANET.COM\\Desktop\\medisys-hp - copia\\PresentacionEscritorio\\Images\\Iconos\\Stop mas chico.png");
                        cmbDispositivos.Enabled = false;
                    
                    }
                    else
                        MessageBox.Show("Error: No se encuentra dispositivo.");
                }
                else
                {
                    if (fuenteDeVideo.IsRunning)
                    {
                        TerminarFuenteDeVideo();
                        btnIniciarDetener.Text = "Iniciar";
                        btnIniciarDetener.Image = Image.FromFile("C:\\Users\\PLANET.COM\\Desktop\\medisys-hp - copia\\PresentacionEscritorio\\Images\\Iconos\\Play mas chco.png");
                        cmbDispositivos.Enabled = true;
                    }
                }
        }

        private void cmDBispositivos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbDispositivos.SelectedIndex != 1)
                btnIniciarDetener.Enabled = true;
            else
                btnIniciarDetener.Enabled = false;

        }

        
    }
}
